// register the interceptor as a service
angular
    .module('web')

    .factory('BaseHttp', [
      '$http',
      '$rootScope',
      '$timeout',
      function($http, $rootScope, $timeout) {
        return function(opt) {
          $rootScope.onRequest = true;

          opt.headers = opt.headers || {};

          // for server side: req.xhr
          if (!opt.headers['X-Requested-With']) {
            opt.headers['X-Requested-With'] = 'XMLHttpRequest';
          }

          if (opt.url.indexOf('http') != 0) {
            opt.url = Global.endpoint + opt.url;
          }

          var httpPromise = $http(opt);

          httpPromise.success(function(data, status, header) {
            setOnRequestFalse();
          });

          httpPromise.error(function(err, status, header) {
            if (opt.params && opt.params.ignoreError) {
            // pass
            } else if (opt.data && opt.data.ignoreError) {
            // pass
            } else {
              $rootScope.$broadcast('http_error_message', err);
            }

            setOnRequestFalse();
          });

          return httpPromise;
        };

        var tid;

        function setOnRequestFalse() {
          $timeout.cancel(tid);
          tid = $timeout(function() {
            $rootScope.onRequest = false;
          }, 600);
        }
      }
    ]);
